package edu.ucsur.tp.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import edu.ucsur.tp.beans.Usuario;
import edu.ucsur.tp.database.utils.MySqlDbConnection;

/**
 * Clase que maneja todo lo relacionado a la tabla usuario desde MyBATIS.
 * 
 * @author Administrator
 *
 */
public class MyBatisUsuarioDAO implements UsuarioDAO {
  
  private SqlSessionFactory sqlSessionFactory;
  private SqlSession session = null;
  
  public MyBatisUsuarioDAO(SqlSessionFactory sqlSessionFactory) {
    this.sqlSessionFactory = sqlSessionFactory;
  }

  @Override
  public List<Usuario> obtenerTodos() {
    try {
      session = sqlSessionFactory.openSession();
      return session.selectList("edu.ucsur.tp.dao.UsuarioMapper.obtenerTodos");
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
    return null;
  }

  @Override
  public Usuario obtener(String codigo) {
    try {
      session = sqlSessionFactory.openSession();
      return session.selectOne("edu.ucsur.tp.dao.UsuarioMapper.obtener", codigo);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
    return null;
  }

  @Override
  public void insertar(Usuario u) {
    try {
      session = sqlSessionFactory.openSession(true);
      session.insert("edu.ucsur.tp.dao.UsuarioMapper.insertar", u);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
  }

  @Override
  public void actualizar(Usuario u) {
    try {
      session = sqlSessionFactory.openSession(true);
      session.update("edu.ucsur.tp.dao.UsuarioMapper.actualizar", u);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
  }

  @Override
  public void eliminar(String codigo) {
    try {
      session = sqlSessionFactory.openSession(true);
      session.delete("edu.ucsur.tp.dao.UsuarioMapper.eliminar", codigo);
    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      session.close();
    }
  }

}
